﻿package com.badibadi.mytools;

import java.util.ArrayList;
import java.util.List;

import com.badibadi.infos.User;

import android.app.PendingIntent;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts.Photo;
import android.telephony.gsm.SmsManager;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
/**
 * 这是获取手机中电话薄的信息
 * @author Administrator
 *
 */
public class PhoneMyInfo {

//   String SENT_SMS_ACTION="SENT_SMS_ACTION";  
//   String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";
	
	private Context context;
	/**
	 * Phone是数据库中的
	 * 联系人的名字，号码，图片id，图片头像，。。。。
	 */
	private String[] PHONES_PROJECTION=new String[]
			{
			  Phone.DISPLAY_NAME,Phone.NUMBER,Photo.PHOTO_ID,Phone.CONTACT_ID
			};
	public PhoneMyInfo(Context _context)
	{
		context=_context;
	}
	/**
	 * 查询人名
	 * @param path 文本框的
	 * @return 返回的是姓名文本框中查询到的人名
	 */
	public List<User> getPeopleIndex(String path)
	{
		List<User> _list=new ArrayList<User>();
		if(path!=null)
		{
			List<User> list=getPhoneContacts();
			
			for(int i=0;i<list.size();i++)
			{
				//如果文本框的长度小于了list的长度
				String name=list.get(i).getUser();
				String phote=list.get(i).getPhoneNumber();
//			   if(path.length()<name.length() && path.length())  	
//			   {
//				   
//			   }else
//			   {
//				   return list;
//			   }
				if((name.indexOf(path))>=0 || (phote.indexOf(path))>=0)
				{
					User user=new User();
					user.setUser(name);
					user.setPhoneNumber(phote);
					_list.add(user);
				}
				
				
				
			}
		
		}
		return _list;
		
	}
	
	
	/**
	 * 获取联系人详细(查询)
	 * @param data 
	 */
	public User getPeopleQuery(String data)
	{
		Cursor cursor=context.getContentResolver().query(Phone.CONTENT_URI, PHONES_PROJECTION,null, null, null);
	    while(cursor.moveToNext())
	    {
	    	String name=cursor.getString(cursor.getColumnIndex(Photo.DISPLAY_NAME));
	    	String mobilePhone=cursor.getString(cursor.getColumnIndex(Phone.NUMBER));
	    	
	    	if(data.equals(name) || data.equals(mobilePhone))
	    	{
	    		Toast.makeText(context, "查询到数据", 1).show();
	    		User user=new User();
	    		int imageid=cursor.getInt(cursor.getColumnIndex(Phone.PHOTO_ID));
	    		
	    		user.setUser(name);
	    		user.setPhoneNumber(mobilePhone);
//	    		user.setUser_head(imageid);
	    		
	    		return user;
	    	}
	    }
	    Toast.makeText(context, "没有查询到数据", 1).show();
	    return null;
	}
	/**
	 * 添加联系人（添加）
	 * 使用事务
	 */
	public void testAddContact(User user)
	{
		Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");
		ContentResolver resolver=context.getContentResolver();
		//这里这个arraylist是作为要向电话薄添加事物的一个批处理列表（和windows中的批处理文件实际上是一个意思）
		ArrayList<ContentProviderOperation> operations =new ArrayList<ContentProviderOperation>();
		//开始添加事物，事务名称，第一个事务为空，表示开始占用raw_contacts的资源
		ContentProviderOperation op1 = ContentProviderOperation.newInsert(uri).withValue("account_name", null).build();
		operations.add(op1);
		//指明要向什么地方添加数据，catacts中四个表中的data表中添加数据
		uri=Uri.parse("content://com.android.contacts/data");
		//第二个事务，添加用户名，向data表中的data1中添加数据，mimeType表示事件属性字段
		ContentProviderOperation op2=ContentProviderOperation.newInsert(uri)
				.withValueBackReference("raw_contact_id", 0)
				.withValue("mimetype", "vnd.android.cursor.item/name")
				.withValue("data1",user.getUser()).build();
		operations.add(op2);
		//第三个事务，添加电话号码，想data1中data1添加数据（data2这个数据表示可以添加多条信息，并没有确实数据可以不用书写）
		 ContentProviderOperation op3=ContentProviderOperation.newInsert(uri)
				 .withValueBackReference("raw_contact_id", 0)
				 .withValue("mimetype", "vnd.android.cursor.item/phone_v2")
				 .withValue("data1", user.getPhoneNumber())
				 .withValue("data2","2")
				 .build();
		operations.add(op3);
		//事务处理列表构建完毕以后，开机按照列表依次执行事务
                   try {
                	   resolver.applyBatch("com.android.contacts", operations);
				} catch (Exception e) {
					// TODO: handle exception
				}	
		           
	}
	/**
	 * 删除 电话薄联系人（删除）
	 * @param name
	 */
	public void deleteContacts(String name)
	{
		//根据姓名求id
		Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");
		ContentResolver resolver=context.getContentResolver();
		Cursor cursor=resolver.query(uri, new String[]{Phone._ID}, "display_name=?", new String[]{name}, null);
		if(cursor.moveToNext())
		{
			int id=cursor.getInt(0);
			//根据id删除data中的相应数据
			resolver.delete(uri,"display_name=?", new String[]{name});
			uri=Uri.parse("content://com.android.contacts/data");
			resolver.delete(uri,"raw_contact_id=?", new String[]{id+""});
		}
		cursor.close();
	}
	
//	public boolean sendOneMessage()
//	{
//		SmsManager smsManager = SmsManager.getDefault();
//		PendingIntent setPI=PendingIntent.getBroadcast(context, 0, new Intent(SENT_SMS_ACTION), 0);
//		
//		Intent deliverIntent=new Intent(DELIVERED_SMS_ACTION);
//		PendingIntent deliverPI=PendingIntent.getBroadcast(context, 0, deliverIntent, 0);
//		smsManager.sendTextMessage(phoneno, null, msgstr, sentPI, deliverPI);
//		   
//	
//		// sendTextMessage （）的参数 意义依次为 ：     
//		// 1 短信发送的地址也就是电话号码
//		// 2 sc地址   
//		// 3 短消息的内容    
//		// 4pendingintent 参数   
//		// 5 发送intent
//		
//		
//		
//		
//		return true;
//		
//	}
	
	
	/**
	 * 获取手机电话薄信息类
	 * @return 电话薄用户列表（list）
	 */
	public List<User> getPhoneContacts()
	{
		List<User> list=new ArrayList<User>();
		ContentResolver resolver=context.getContentResolver();
		
		Cursor cursor=resolver.query(Phone.CONTENT_URI, PHONES_PROJECTION, null, null, null);
          if(cursor!=null)
          {
        	  while(cursor.moveToNext()){
        	  User user=new User();
        	  //得到手机号码
        	  String phoneNumber=cursor.getString(cursor.getColumnIndex(Phone.NUMBER));//Phone.NUMBER ==key 
             if(TextUtils.isEmpty(phoneNumber))
             {
            	 continue;
             }
          
        	   String username=cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));
               user.setUser(username);
               user.setPhoneNumber(phoneNumber);
               list.add(user);
        	  
        	  
        	  }
              
          }
	    return list;
	}
	
}
